RPG II is a version of the IBM RPG programming language. It was developed in the late 1960s and was offered on a number of different computers, including the IBM System/3, System/32, System/34, System/36, System/370, The Singer System 10, and the Wang VS Series. ICL also produced versions for its ICL 2903 system and for the VME/K operating system. Further, Burroughs Corporation produced an RPG II compiler with database extensions for its B1700 series of computers.
RPG stands for Report Program Generator. RPG is a fixed-format programming language, which means that code must be placed in exact column locations in order to generate correct results. COBOL and BASIC are considered free-format to some extent because the code can be placed variously and still generate correct results.
RPG also incorporates fixed logic, which means that files are opened when the program begins and closed when the program ends, even though this is not explicitly stated; special variables such as UDATE, UYEAR, PAGE, and so forth, are filled when the program begins or when page overflow occurs, even though there is no explicit instruction for these activities. Total calculations and output are done at "total time," after the detail cycle when L1/LR has been set on by fixed logic.
The concept of RPG fitted neatly with a cyclical machine that read cards, summarised their contents and prints a result, rather like a tabulating machine. The language was extended to handle other input and output devices and provides a fast and efficient method of programming.
Devices such as the workstation (WORKSTN), the keyboard (KEYBORD), or the console (CONSOLE) do not have a fixed number of records at the beginning of the job and therefore, in order to incorporate the fixed-logic RPG "Last Record" cycle, the LR indicator can be set on with a SETON instruction. LR cannot be set off.
RPG II did not evolve much from the 1977 implementation on the System/34 to 2000 when the Advanced/36 was discontinued from marketing.
Third-party providers sold more than 200 different assembler subroutines that could be used by System/36 and Advanced/36 programmers to exceed RPG II limitations.
Contents |
In the popular System/36 implementation of RPG II, there are 8 different specification types:
Operation codes appear in columns 28–32 of an RPG-II calculation specification.
Operation code | Name |
---|---|
ADD | Add |
SUB | Subtract |
MULT | Multiply |
DIV | Divide |
Z-ADD | Zero and Add |
Z-SUB | Zero and Subtract |
MVR | Move Remainder |
MOVE | Move |
MOVEL | Move Left |
MHLZO | Move High to Low Zone |
MLHZO | Move Low to High Zone |
MLLZO | Move Low to Low Zone |
MHHZO | Move High to High Zone |
BITON | Bit On |
BITOF | Bit Off |
TESTB | Test Bit |
GOTO | Go To |
TAG | Tag (destination of a GOTO) |
EXSR | Execute Subroutine |
BEGSR | Begin Subroutine |
ENDSR | End Subroutine |
SETON | Set On |
SETOF | Set Off |
EXCPT | Exception |
EXIT | Exit |
RLABL | Redefine Label |
ULABL | User Label |
CALL1 | Call |
PARM1 | Parameter |
CHAIN | Chain |
READ | Read |
READE | Read Equal |
READP | Read Previous |
REDPE | Read Previous Equal |
SETLL | Set Lower Limits |
SET | Set |
TIME | Time of day (000000-235959) |
DSPLY | Display |
SORTA | Sort Array |
XFOOT | Crossfoot |
MOVEA | Move Array |
LOKUP | Lookup (find in array) |
CHAIN retrieves the record in the indexed file named in Factor 2 that matches the exact key specified by the value in Factor 1.
SETLL causes the index pointer for the file named in Factor 2 to be positioned at the location specified by the value in Factor 1.
SORTA causes the named array to be sorted in place; that is, the elements appear in order.
Z-SUB calculates Factor 2 with opposite sign and moved to result field.
XFOOT causes an array to be summed and the result moved to result field.
MVR must follow a DIV operation. The integer remainder of the DIV operation is placed in the result field. MVR following the DIV operation for "56 divided by 3" would place the value 2 in the result field.
3 | H |
5 | F/files |
6 | F/extensions |
7 | E |
8 | L |
10 | I/header |
11 | I/fields |
12 | C |
13 | O/header |
14 | O/fields |
F*************************************************************** F* THIS PROGRAM READS THE CONTENTS OF AN INVOICE HEADER FILE F* AND PRINTS THE INVOICES PROCESSED FOR THE DATE SET IN THE F* LOCAL DATA AREA. THERE ARE LEVEL BREAKS AND TOTALS FOR F* EACH STORE. F*************************************************************** F* FINVHDR IP F 62 DISK FPRINTER O F 132 OF PRINTER IINVHDR NS 01 1NC I 1 3 STORE L1 I 4 13 INVNO I 14 20 CUSTNO I 21 45 STNAM I 46 53 INVDAT I 54 622TOTINV I UDS I 1 8 RPTDAT C 01 INVDAT COMP RPTDAT 11 C 01 11 ADD TOTINV L1TOT 92 C 01 11 ADD TOTINV LRTOT 92 OPRINTER H 101 1P O OR OF O PAGE Z 106 O 102 'PAGE' O 59 'VERY BIG' O 72 'STORES, INC.' O UDATE Y 17 O 8 'RUN DATE' O H 1 1P O OR OF O 73 'DAILY SALES BY STORE' O H 2 1P O OR OF O RPTDAT 83 O 63 'FOR DATE:' O H 1 1P O OR OF O 6 'STORE' O 18 'INVOICE' O 28 'CUSTOMER' O 58 'CUSTOMER' O 78 'INVOICE' O H 2 1P O OR OF O 6 'NUMBER' O 18 'NUMBER' O 28 'NUMBER' O 58 'NAME' O 78 'TOTAL' O D 0 L1 O STORE 6 O D 1 01 11 O INVNO 18 O CUSTNO 28 O STNAM 58 O TOTINV1B 78 O T 1 L1 O 45 'STORE TOTAL...' O L1TOT 1B 78 O T 1 LR O 45 'GRAND TOTAL...' O LRTOT 1 78